/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package redinftel.formularios;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import redinftel.entidades.Amistad;
import redinftel.entidades.Perfil;
import redinftel.entidades.Usuario;
import redinftel.sesiones.AmistadFacadeRemote;
import redinftel.sesiones.PerfilFacadeRemote;
import redinftel.sesiones.UsuarioFacadeRemote;

/**
 * Clase que obtiene el perfil
 * @author Six Degrees Team
 */
@ManagedBean
@SessionScoped
public class ObtenerPerfilBean implements Serializable {
    @EJB
    private AmistadFacadeRemote amistadFacade;
    @EJB
    private UsuarioFacadeRemote usuarioFacade;
    @EJB
    private PerfilFacadeRemote perfilFacade;

    public void setAmistadFacade(AmistadFacadeRemote amistadFacade) {
        this.amistadFacade = amistadFacade;
    }

    public void setPerfilFacade(PerfilFacadeRemote perfilFacade) {
        this.perfilFacade = perfilFacade;
    }

    public void setUsuarioFacade(UsuarioFacadeRemote usuarioFacade) {
        this.usuarioFacade = usuarioFacade;
    }
    private boolean amigos;
    private boolean amistadSolicitada;
    private Perfil usuario;
    private boolean soyYo;
    private String miId;
    private BigDecimal miIdBigDecimal;

    public BigDecimal getMiIdBigDecimal() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario)session.getAttribute("usuario"));
        miIdBigDecimal = yo.getIdUsuario();
        return miIdBigDecimal;
    }

    public void setMiIdBigDecimal(BigDecimal miIdBigDecimal) {
        this.miIdBigDecimal = miIdBigDecimal;
    }
    private boolean soySolicitado;
    private int grados;

    public int getGrados() {
        FacesContext fctx = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) fctx.getExternalContext().getSession(false);
        Usuario yo = (Usuario) session.getAttribute("usuario");

        // se crea la lista de amigos de yo
        Set<Usuario> listaAmigos = new HashSet();
        for (Amistad a : yo.getAmistadCollection()) {
            if (!a.getIdAmigo1().equals(yo) && a.getEstado().equals("CONFIRMADA")) {
                listaAmigos.add(a.getIdAmigo1());
            }
            if (!a.getIdAmigo2().equals(yo) && a.getEstado().equals("CONFIRMADA")) {
                listaAmigos.add(a.getIdAmigo2());
            }
        }
        for (Amistad a : yo.getAmistadCollection1()) {
            if (!a.getIdAmigo1().equals(yo) && a.getEstado().equals("CONFIRMADA")) {
                listaAmigos.add(a.getIdAmigo1());
            }
            if (!a.getIdAmigo2().equals(yo) && a.getEstado().equals("CONFIRMADA")) {
                listaAmigos.add(a.getIdAmigo2());
            }
        }

        BuscarGradoSeparacionBean grado = new BuscarGradoSeparacionBean();
        grados = grado.gradoSeparacion(usuario.getUsuario(), listaAmigos);
        return grados;
    }
/**
 *
 * @param grados
 */
    public void setGrados(int grados) {
        this.grados = grados;
    }
/**
 *
 * @return devuelve true en el caso de el usuario esta solicitado
 */
    public boolean isSoySolicitado() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario)session.getAttribute("usuario"));

        String idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");
        con.getExternalContext().getSessionMap().put("idAmigo", idAmigo);

        return isSoySolicitado(idAmigo, yo);

    }

        public boolean isSoySolicitado(String idAmigo, Usuario yo){

        Usuario amigo = usuarioFacade.find(new BigDecimal(idAmigo));

        soySolicitado=false;

        Amistad amistad2 = amistadFacade.findByUsuarios(amigo, yo);
        if(amistad2!=null && amistad2.getEstado().equals("PENDIENTE"))
            soySolicitado=true;

        return soySolicitado;
    }

    public void setSoySolicitado(boolean soySolicitado) {
        this.soySolicitado = soySolicitado;
    }
/**
 *
 * @return miId
 */

    public String getMiId() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario)session.getAttribute("usuario"));
        miId = yo.getIdUsuario().toString();
        return miId;
    }

    public void setMiId(String miId) {
        this.miId = miId;
    }
/**
 *
 * @return me devuelve true si el usuario es yo mismo
 */
    public boolean isSoyYo() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario)session.getAttribute("usuario"));

        String idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");
        con.getExternalContext().getSessionMap().put("idAmigo", idAmigo);

        return isSoyYo(idAmigo, yo);

    }

    public boolean isSoyYo(String idAmigo, Usuario yo){

        soyYo=false;

        String miId = yo.getIdUsuario().toString();

        if(miId.equals(idAmigo))
            soyYo=true;

        return soyYo;
    }
/**
 *
 * @param soyYo
 */
    public void setSoyYo(boolean soyYo) {
        this.soyYo = soyYo;
    }

    public boolean isAmistadSolicitada() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario)session.getAttribute("usuario"));

        String idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");
        con.getExternalContext().getSessionMap().put("idAmigo", idAmigo);

        return isAmistadSolicitada(idAmigo, yo);

    }

    public boolean isAmistadSolicitada(String idAmigo, Usuario yo){

        Usuario amigo = usuarioFacade.find(new BigDecimal(idAmigo));

        amistadSolicitada=false;

        Amistad amistad1 = amistadFacade.findByUsuarios(yo, amigo);
        if(amistad1!=null && amistad1.getEstado().equals("PENDIENTE"))
            amistadSolicitada=true;

        return amistadSolicitada;
    }

    public void setAmistadSolicitada(boolean amistadSolicitada) {
        this.amistadSolicitada = amistadSolicitada;
    }
/**
 *
 * @return me redirige al usuario
 */
    public Perfil getUsuario() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        String idAmigo = con.getExternalContext().getRequestParameterMap().get("idAmigo");
        if(idAmigo==null)
            idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");
        con.getExternalContext().getSessionMap().put("idAmigo", idAmigo);
        usuario = perfilFacade.find(new BigDecimal(idAmigo));

        return usuario;
    }

    public void setUsuario(Perfil usuario) {
        this.usuario = usuario;
    }
/**
 *
 * @return
 */
    public boolean isAmigos() {
        FacesContext con = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) con.getExternalContext().getSession(false);
        Usuario yo = new Usuario((Usuario)session.getAttribute("usuario"));

        String idAmigo = (String) con.getExternalContext().getSessionMap().get("idAmigo");
        con.getExternalContext().getSessionMap().put("idAmigo", idAmigo);

        return isAmigos(idAmigo, yo);

    }

    public boolean isAmigos(String idAmigo, Usuario yo){

        Usuario amigo = usuarioFacade.find(new BigDecimal(idAmigo));

        amigos=false;

        Amistad amistad1 = amistadFacade.findByUsuarios(yo, amigo);
        if(amistad1!=null && amistad1.getEstado().equals("CONFIRMADA"))
            amigos=true;

        Amistad amistad2 = amistadFacade.findByUsuarios(amigo, yo);
        if(amistad2!=null && amistad2.getEstado().equals("CONFIRMADA"))
            amigos=true;

        return amigos;
    }
/**
 *
 * @param amigos
 */
    public void setAmigos(boolean amigos) {
        this.amigos = amigos;
    }
/**
 *
 * @return me redirige a la pagina del perfil
 */
    public String irAMiPerfil(){
        return "perfil";
    }

    public String irAMultimedia(){
        return "mostrarMultimedia";
    }
    /** Creates a new instance of ObtenerPerfilBean */
    public ObtenerPerfilBean() {
          ChangeLocaleBean.cambiar();
    }

    public ObtenerPerfilBean(boolean movil){

    }
}
